package com.twb.auth.service;

import com.twb.auth.common.TwbLoginUser;
import com.twb.auth.entity.twbAuth.vo.LoginUserVo;
import com.twb.auth.entity.twbResource.TwbResource;
import com.twb.auth.entity.twbUser.TwbUser;
import com.twb.auth.entity.twbUser.dto.GetTwbUserByIdDto;
import com.twb.auth.entity.twbUser.dto.SearchTwbUserDto;
import com.twb.auth.entity.twbUser.vo.SaveTwbUserVo;
import com.twb.auth.entity.twbUser.vo.SearchTwbUserVo;
import com.twb.auth.entity.twbUser.vo.UpdateTwbUserByIdVo;
import com.twb.core.base.entity.BaseLoginUser;
import com.twb.core.base.entity.TwbPageInfo;
import com.twb.core.base.service.IBaseService;
import java.util.List;
import java.util.Set;

public interface ITwbUserService extends IBaseService<TwbUser> {

	/**
	 * @Title getLoginUserInfo
	 * @Description 获取登录用户基本信息
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2018年11月12日 下午5:40:14
	 */
	public BaseLoginUser getLoginUserInfo(LoginUserVo vo);

	/**
	 * @Title getLoginUserInfoById
	 * @Description 根据用户ID获取登录用户信息
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2021年4月28日 下午4:58:52
	 */
	public BaseLoginUser getLoginUserInfoById(String id);

	/**
	 * @Title getTwbUserById
	 * @Description 根据ID获取用户详情
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:11:05
	 */
	GetTwbUserByIdDto getTwbUserById(String id);

	/**
	 * @Title searchTwbUser
	 * @Description 分页查询用户
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 上午10:11:39
	 */
	TwbPageInfo<SearchTwbUserDto> searchTwbUser(SearchTwbUserVo vo);

	/**
	 * @Title saveTwbUser
	 * @Description 保存用户
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 上午11:00:40
	 */
	boolean saveTwbUser(SaveTwbUserVo vo);

	/**
	 * @Title updateTwbUserById
	 * @Description 根据主键更新用户信息
	 * @param vo
	 * @return
	 * @AuthorOriginally DHL
	 * @date 2022年4月6日 下午2:01:48
	 */
	public boolean updateTwbUserById(UpdateTwbUserByIdVo vo);

	/**
	 * @Title deleteTwbUserById
	 * @Description 删除用户
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:22:04
	 */
	boolean deleteTwbUserById(String id);

	/**
	 * @Title logicDeleteTwbUserById
	 * @Description 逻辑删除用户信息
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2021年3月10日 下午4:53:46
	 */
	boolean logicDeleteTwbUserById(String id);

	/**
	 * @Title saveUserOrg
	 * @Class: ITwbUserService.java
	 * @Description 保存用户机构
	 * @param userId
	 * @param orgIds
	 * @return
	 * @author DSY
	 * @date 2018年11月25日 下午9:04:36
	 */
	public int saveUserOrg(String userId, String orgIds);

	/**
	 * @Title saveUserRole
	 * @Class: ITwbUserService.java
	 * @Description 保存用户角色
	 * @param userId
	 * @param roleIds
	 * @return
	 * @author DSY
	 * @date 2018年11月25日 下午9:24:32
	 */
	public int saveUserRole(String userId, String roleIds);

	/**
	 * @Title updateCurrentPwd
	 * @Class: ITwbUserService.java
	 * @Description 用户密码重置
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2018年11月25日 下午9:34:27
	 */
	public boolean updateCurrentPwd(String userId, String pwd);

	/**
	 * @Title updateUserPwd
	 * @Description 用户修改密码
	 * @param userId
	 * @param password
	 * @return
	 * @author DSY
	 * @date 2020年3月31日 上午10:13:30
	 */
	public boolean updateUserPwd(String userId, String password);

	/**
	 * @Title searchRoleUsers
	 * @Description 分页查询角色待选择用户
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2020年7月15日 下午4:10:49
	 */
	TwbPageInfo<SearchTwbUserDto> searchRoleSelectUsers(SearchTwbUserVo vo);

	/**
	 * @Title searchRoleUsers
	 * @Description 分页查询角色用户
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2020年7月15日 下午4:10:49
	 */
	TwbPageInfo<SearchTwbUserDto> searchRoleUsers(SearchTwbUserVo vo);

	/**
	 * @Title grantOrganization
	 * @Description 修改组织机构
	 * @param orgId
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2021年4月10日 下午8:24:20
	 */
	int grantOrganization(String orgId, String userId);

	/**
	 * @Title getUserNameByLoginName
	 * @Description 根据loginName查询姓名
	 * @param loginName
	 * @return
	 * @author DHL
	 * @date 2021年3月29日 下午9:52:44
	 */
	String getUserNameByLoginName(String loginName);

	/**
	 * @Title cacheLoginUserApis
	 * @Description 缓存登录用户Api信息
	 * @param loginUser
	 * @AuthorOriginally DSY
	 * @date 2022年3月29日 下午3:50:29
	 */
	public void cacheLoginUserApis(BaseLoginUser loginUser, Long timeoutSeconds);

	/**
	 * @Title listLoginUserResources
	 * @Description 获取当前登录用户资源菜单
	 * @param loginUser
	 * @param appId
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年3月29日 下午9:43:23
	 */
	public List<TwbResource> listLoginUserResources(BaseLoginUser loginUser, String appId);

	/**
	 * @Title cacheLoginUserDataScope
	 * @Description 缓存用户的数据权限
	 * @param loginUser
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年7月25日 下午8:40:05
	 */
	public Set<String> cacheLoginUserDataScope(BaseLoginUser loginUser, Long timeoutSeconds);

	/**
	 * @Title cacheTwbLoginUserInfo
	 * @Description 缓存登录用户详细信息
	 * @param loginUser
	 * @return
	 * @throws Exception
	 * @AuthorOriginally DSY
	 * @date 2022年7月25日 下午9:07:43
	 */
	public TwbLoginUser cacheTwbLoginUserInfo(String appId, BaseLoginUser loginUser, Long timeoutSeconds);

	/**
	 * 查询用户下拉
	 * @param vo
	 * @return
	 */
	List<SearchTwbUserDto> searchUsersList(SearchTwbUserVo vo);


	/**
	 * 根据openid查询用户
	 *
	 * @param openid openid
	 * @return {@link TwbUser }
	 * @author DHL
	 * @date 2022-11-09 09:38:57
	 */
	public TwbUser getUserByOpenId(String openid);

	/**
	 * 企业微信用户ID登录
	 *
	 * @param cpUserId cp用户id
	 * @return {@link TwbUser }
	 * @author DHL
	 * @date 2022-12-26 03:35:27
	 */
	public TwbUser getUserByCpUserId(String cpUserId);

	/**
	 * @Title listByPostIdAndOrgId
	 * @Description 根据岗位ID和部门ID查询对应人员信息
	 * @param postId
	 * @param orgId
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年11月12日 下午8:07:03
	 */
	public List<TwbUser> listByPostIdAndOrgId(String postId, String orgId);
	
	/**
	 * @Title getDirectSupervisorById
	 * @Description 获取用户直属主管
	 * @param id
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年11月12日 下午9:20:38
	 */
	public TwbUser getDirectSupervisorById(String id);


}
